home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1995 / MacHack 1995.toast / Presentations / Presentations ’88 / Feldt's Object Stuff / objectMgr stuff / windowObj.c < prev    next >
Text File  |  1987-04-12  |  11KB  |  486 lines

  1. /*                          Small Systems Guild                                */
  2. /*                               PO box 2751                                    */
  3. /*                             3105 Sunnywood                                    */
  4. /*                        Ann Arbor, Michigan 48103                            */
  5. /*                             (313) 996-4238                                    */
  6.  
  7. /*                   copyright © 1987 Small Systems Guild                         */
  8.  
  9. /*                      source code compilable using                            */
  10. /*                       Lightspeed C compiler 2.01                            */
  11.  
  12. #include    "objectMgr.h"
  13.  
  14. Handle Window(sel,arg)
  15. USHORT        sel;
  16. ULONG        arg;
  17. {
  18.     switch(sel) {
  19.         case NEW:                        /* MUST be unique for each subclass    */
  20.             return(new_window(arg));
  21.             break;
  22.         case SELF:
  23.             return(self_object(arg));
  24.             break;
  25.         case CLASS:
  26.             return(class_object(arg));
  27.             break;
  28.         case SIZE:
  29.             return(size_object(arg));
  30.             break;
  31.         case ASK_STATUS:
  32.             return(ask_object(arg));
  33.             break;
  34.         case SET_STATUS:
  35.             return(set_object(arg));
  36.             break;
  37.         case VALID:
  38.             return(valid_object(arg));
  39.             break;
  40.         case SHOW:
  41.             return(show_window(arg));
  42.             break;
  43.         case HIDE:
  44.             return(hide_window(arg));
  45.             break;
  46.         case ACTIVATE:
  47.             return(actv_window(arg));
  48.             break;
  49.         case DEACTIVATE:
  50.             return(deactv_window(arg));
  51.             break;
  52.         case MOVE:
  53.             return(move_window(arg));
  54.             break;
  55.         case GROW:
  56.             return(grow_window(arg));
  57.             break;
  58.         case UPDATE:
  59.             return(updt_window(arg));
  60.             break;
  61.         case FREE:
  62.             return(free_window(arg));
  63.             break;
  64.         default:
  65.             return(NULL);
  66.     }
  67. }
  68.  
  69. Handle new_window(arg)
  70. WDHandle        arg;
  71. {
  72.     Handle            objHndl;
  73.     ULONG            size;
  74.     WindowPtr        wPtr;
  75.     
  76.     if (!ValidHandle((Handle)arg))
  77.         return(NULL);
  78.  
  79.     size = (ULONG)sizeof(window);
  80.     objHndl = NewHandle(size);
  81.     if (!ValidHandle(objHndl))
  82.         return(NULL);
  83.     
  84.     wPtr = crt_window(arg);
  85.     if (!ValidPointer((Ptr)wPtr)) {
  86.         DisposHandle(objHndl);
  87.         return(NULL);
  88.     }
  89.     
  90.     (**((object **)objHndl)).isa = WINDOW;
  91.     (**((object **)objHndl)).size = size;
  92.     (**((object **)objHndl)).status = INACTIVE;
  93.     (**((object **)objHndl)).sync = OBJ_SYNC;
  94.     (**((object **)objHndl)).id = objHndl;
  95.     (**((window **)objHndl)).wPtr = wPtr;
  96.     return(objHndl);
  97. }
  98.     
  99. Handle show_window(objHndl)
  100. Handle        objHndl;
  101. {
  102.     if (!ValidHandle(objHndl))
  103.         return(NULL);
  104.  
  105.     if ((**((object **)objHndl)).status != ACTIVE)
  106.         return(NULL);
  107.  
  108.     if (!ValidPointer((Ptr)((**((window **)objHndl)).wPtr)))
  109.         return(NULL);
  110.  
  111.     ShowWindow((**((window **)objHndl)).wPtr);
  112.     return(objHndl);
  113. }
  114.  
  115. Handle hide_window(objHndl)
  116. Handle        objHndl;
  117. {
  118.     if (!ValidHandle(objHndl))
  119.         return(NULL);
  120.  
  121.     if ((**((object **)objHndl)).status != ACTIVE)
  122.         return(NULL);
  123.  
  124.     if (!ValidPointer((Ptr)((**((window **)objHndl)).wPtr)))
  125.         return(NULL);
  126.  
  127.     HideWindow((**((window **)objHndl)).wPtr);
  128.     return(objHndl);
  129. }
  130.  
  131. Handle actv_window(objHndl)
  132. Handle        objHndl;
  133. {
  134.     WData        WD;
  135.     WindowPtr    wPtr;
  136.  
  137.     if (!ValidHandle(objHndl))
  138.         return(NULL);
  139.  
  140.     wPtr = (**((window **)objHndl)).wPtr;
  141.     if (!ValidPointer((Ptr)wPtr))
  142.         return(NULL);
  143.     
  144.     GetWData(wPtr,&WD);
  145.     if (ValidWData(&WD)) {
  146.         SetPort(wPtr);
  147.         if (WD.GrowBox)
  148.             DrawGrowIcon(wPtr);
  149.         if (ValidHandle((Handle)(WD.vScrollBar)))
  150.             ShowControl(WD.vScrollBar);
  151.         if (ValidHandle((Handle)(WD.hScrollBar)))
  152.             ShowControl(WD.hScrollBar);
  153.         if (ValidHandle((Handle)(WD.wList)))
  154.             LMActivate(WD.wList);
  155.         if (ValidHandle((Handle)(WD.TEH)))
  156.             TEActivate(WD.TEH);
  157.         return(objHndl);
  158.     }
  159.     return(NULL);
  160. }
  161.  
  162. Handle deactv_window(objHndl)
  163. Handle        objHndl;
  164. {
  165.     WData        WD;
  166.     WindowPtr    wPtr;
  167.  
  168.     if (!ValidHandle(objHndl))
  169.         return(NULL);
  170.  
  171.     wPtr = (**((window **)objHndl)).wPtr;
  172.     if (!ValidPointer((Ptr)wPtr))
  173.         return(NULL);
  174.     
  175.     GetWData(wPtr,&WD);
  176.     if (ValidWData(&WD)) {
  177.         if (WD.GrowBox)
  178.             DrawGrowIcon(wPtr);
  179.         if (ValidHandle((Handle)(WD.vScrollBar)))
  180.             HideControl(WD.vScrollBar);
  181.         if (ValidHandle((Handle)(WD.hScrollBar)))
  182.             HideControl(WD.hScrollBar);
  183.         if (ValidHandle((Handle)(WD.wList)))
  184.             LMDeactivate(WD.wList);
  185.         if (ValidHandle((Handle)(WD.TEH)))
  186.             TEDeactivate(WD.TEH);
  187.         return(objHndl);
  188.     }
  189.     return(NULL);
  190. }
  191.  
  192. Handle move_window(argHndl)
  193. Handle        argHndl;
  194. {
  195.     Handle        objHndl;
  196.     WindowPtr    wPtr;
  197.     SHORT        hCoord,vCoord;
  198.  
  199.     if (!ValidPointer((Ptr)argHndl))
  200.         return(NULL);
  201.  
  202.     objHndl = ((msgArgs *)argHndl)->objHndl;
  203.     if (ValidHandle(objHndl)) {
  204.         if (!((**((object **)objHndl)).sync == OBJ_SYNC)) {
  205.             objHndl = argHndl;
  206.             if (!((**((object **)objHndl)).sync == OBJ_SYNC))
  207.                 return(NULL);
  208.         }
  209.     }
  210.     else {
  211.         objHndl = argHndl;
  212.         if (!((**((object **)objHndl)).sync == OBJ_SYNC))
  213.             return(NULL);
  214.     }
  215.  
  216.     wPtr = (**((window **)objHndl)).wPtr;
  217.     hCoord = (SHORT)(((msgArgs *)argHndl)->objDat1);
  218.     vCoord = (SHORT)(((msgArgs *)argHndl)->objDat2);
  219.     if (!ValidPointer((Ptr)wPtr))
  220.         return(NULL);
  221.     
  222.     MoveWindow(wPtr,hCoord,vCoord,FALSE);
  223.     return(objHndl);
  224. }
  225.  
  226. Handle grow_window(argHndl)
  227. Handle        argHndl;
  228. {
  229.     WData        WD;
  230.     Handle        objHndl;
  231.     WindowPtr    wPtr;
  232.     SHORT        hCoord,vCoord;
  233.     Rect        newRect,badRect,oldWRect;
  234.  
  235.     if (!ValidPointer((Ptr)argHndl))
  236.         return(NULL);
  237.  
  238.     objHndl = ((msgArgs *)argHndl)->objHndl;
  239.     if (ValidHandle(objHndl)) {
  240.         if (!((**((object **)objHndl)).sync == OBJ_SYNC)) {
  241.             objHndl = argHndl;
  242.             if (!((**((object **)objHndl)).sync == OBJ_SYNC))
  243.                 return(NULL);
  244.         }
  245.     }
  246.     else {
  247.         objHndl = argHndl;
  248.         if (!((**((object **)objHndl)).sync == OBJ_SYNC))
  249.             return(NULL);
  250.     }
  251.  
  252.     wPtr = (**((window **)objHndl)).wPtr;
  253.     hCoord = (SHORT)(((msgArgs *)argHndl)->objDat1);
  254.     vCoord = (SHORT)(((msgArgs *)argHndl)->objDat2);
  255.     if (!ValidPointer((Ptr)wPtr))
  256.         return(NULL);
  257.     
  258.     GetWData(wPtr,&WD);
  259.     if (!ValidWData(&WD))
  260.         return(NULL);
  261.  
  262.     oldWRect = wPtr->portRect;
  263.     EraseRect(&oldWRect);
  264.     if (WD.GrowBox)    {
  265.         newRect = oldWRect;
  266.         ClipRect(&newRect);
  267.         newRect.left = newRect.right - 14;
  268.         newRect.top = newRect.bottom - 14;
  269.     }
  270.  
  271.     SizeWindow(wPtr,hCoord,vCoord,TRUE);
  272.  
  273.     if (WD.GrowBox)    {
  274.         if (!ValidHandle((Handle)(WD.vScrollBar))) {
  275.             badRect = oldWRect;
  276.             badRect.left = badRect.right - 15;
  277.             InvalRect(&badRect);
  278.         }
  279.         if (!ValidHandle((Handle)(WD.hScrollBar))) {
  280.             badRect = oldWRect;
  281.             badRect.top = badRect.bottom - 15;
  282.             InvalRect(&badRect);
  283.         }
  284.     }
  285.  
  286.     if (ValidHandle((Handle)(WD.TEH)))
  287.         TEResize(wPtr,&oldWRect);
  288.     ClipRect(&(wPtr->portRect));
  289.     InvalRect(&newRect);
  290.     AdjustScrollBars(wPtr);
  291.     return(objHndl);
  292. }
  293.  
  294. Handle updt_window(objHndl)
  295. Handle        objHndl;
  296. {
  297.     WData        WD;
  298.     GrafPtr        savePort;
  299.     Rect        upRect;
  300.     WindowPtr    wPtr;
  301.  
  302.     if (!ValidHandle(objHndl))
  303.         return(NULL);
  304.  
  305.     if ((**((object **)objHndl)).status != ACTIVE)
  306.         return(NULL);
  307.  
  308.     wPtr = (**((window **)objHndl)).wPtr;
  309.     if (!ValidPointer((Ptr)wPtr))
  310.         return(NULL);
  311.  
  312.     GetWData(wPtr,&WD);
  313.     if (ValidWData(&WD)) {
  314.         GetPort(&savePort);                    /* save current GrafPort */
  315.         SetPort(wPtr);                        /* connect QuickDraw to window */
  316.         BeginUpdate(wPtr);
  317.             upRect = wPtr->portRect;
  318.             ClipRect(&upRect);
  319.             if (ValidHandle((Handle)(WD.hScrollBar)))
  320.                 upRect.bottom -= 15;
  321.             if (ValidHandle((Handle)(WD.vScrollBar)))
  322.                 upRect.right -= 15;
  323.             EraseRect(&upRect);
  324.  
  325.             if (ValidHandle((Handle)WD.windowPic)) {
  326.                 CalcContentRect(wPtr,&upRect);
  327.                 GrafUpdate(wPtr,&upRect);
  328.             }
  329.  
  330.             if (ValidHandle((Handle)(WD.wList)))
  331.                 LMUpdate(wPtr,WD.wList);
  332.  
  333.             if (ValidHandle((Handle)(WD.TEH))) {
  334.                 XTTEUpdate(wPtr);
  335.                 if (wPtr == FrontWindow())
  336.                     TEActivate(WD.TEH);
  337.                 else
  338.                     TEDeactivate(WD.TEH);
  339.             }
  340.  
  341.             DrawControls(wPtr);
  342.             if (WD.GrowBox)
  343.                 DrawGrowIcon(wPtr);
  344.         EndUpdate(wPtr);
  345.         SetPort(savePort);                                /* restore original GrafPort */
  346.         return(objHndl);
  347.     }
  348.     else
  349.         return(NULL);
  350. }
  351.  
  352. Handle free_window(objHndl)
  353. Handle        objHndl;
  354. {
  355.     if (!ValidHandle(objHndl))
  356.         return(objHndl);
  357.  
  358.     if ((**((object **)objHndl)).status == ACTIVE)
  359.         return(objHndl);
  360.  
  361.     if ((**((object **)objHndl)).isa != WINDOW)
  362.         return(objHndl);
  363.  
  364.     KillWindow((**((window **)objHndl)).wPtr);
  365.     DisposHandle(objHndl);
  366.     return(NULL);
  367. }
  368.     
  369. WindowPtr crt_window(wdh)
  370. WDHandle    wdh;
  371. {
  372.     WData            WD;
  373.     WDHandle         tempWDH;
  374.     WindowPtr        oldFrontW,wrPtr;
  375.     WindowRecord    *wRecPtr;
  376.     Rect            boundsRect;
  377.     int                wType;
  378.     char            *title;
  379.     Boolean            goAwayBox;
  380.     Boolean            Visible;
  381.  
  382.     boundsRect = *((Rect *)((**wdh).rsrv3));
  383.  
  384.     wType = (SHORT)((**wdh).rsrv4);
  385.     if ((wType < 0) || (wType > 23) ||
  386.             ((wType > 4) && (wType < 16) && (wType != 8) && (wType != 12)))
  387.         return(NULL);
  388.                                     /* make conflicting window types consistent    */
  389.     if (((**wdh).GrowBox == FALSE) && (wType == 0))
  390.         wType = 4;
  391.     if (((**wdh).GrowBox != FALSE) && (wType == 4))
  392.         wType = 0;
  393.     if (((**wdh).GrowBox == FALSE) && (wType == 8))
  394.         wType = 12;
  395.     if (((**wdh).GrowBox != FALSE) && (wType == 12))
  396.         wType = 8;
  397.  
  398.     oldFrontW = FrontWindow();
  399.  
  400.     wRecPtr = (WindowRecord *)((**wdh).rsrv1);
  401.     title = (char *)((**wdh).rsrv2);
  402.     goAwayBox = (Boolean)((**wdh).UsrRef2);
  403.     Visible = (Boolean)((**wdh).UsrRef1);
  404.     wrPtr = NewWindow(wRecPtr,&boundsRect,title,FALSE,wType,NEG_ONE,goAwayBox,NULL);
  405.     if (!ValidPointer((Ptr)wrPtr))
  406.         return(NULL);
  407.  
  408.     InitWData(&WD);
  409.     WD.GrowBox = (**wdh).GrowBox;
  410.     if (WD.GrowBox)
  411.         DrawGrowIcon(wrPtr);
  412.     if ((**wdh).vScrollBar != NULL) {
  413.         boundsRect.left = wrPtr->portRect.right - XTBarWidth;
  414.         boundsRect.top = wrPtr->portRect.top - 1;
  415.         boundsRect.right = wrPtr->portRect.right + 1;
  416.         boundsRect.bottom = wrPtr->portRect.bottom - wrPtr->portRect.top;
  417.         if (WD.GrowBox)
  418.             boundsRect.bottom -= 14;
  419.         WD.vScrollBar = NewControl(wrPtr,&boundsRect,"\P",Visible,1,1,100,scrollBarProc,NULL);
  420.     }
  421.     if ((**wdh).hScrollBar != NULL) {
  422.         boundsRect.left = wrPtr->portRect.left - 1;
  423.         boundsRect.top = wrPtr->portRect.bottom - XTBarWidth;
  424.         boundsRect.right = wrPtr->portRect.right;
  425.         if (WD.GrowBox || (**wdh).vScrollBar != NULL)
  426.             boundsRect.right -= 14;
  427.         boundsRect.bottom = wrPtr->portRect.bottom + 1;
  428.         WD.hScrollBar = NewControl(wrPtr,&boundsRect,"\P",Visible,1,1,100,scrollBarProc,NULL);
  429.     }
  430.     tempWDH = (WDHandle)NewHandle((long)sizeof(WData));
  431.     SetWRefCon(wrPtr,tempWDH);
  432.     if (!ValidHandle((Handle)tempWDH))
  433.         return(NULL);
  434.     (**tempWDH).sync1 = SYNC1VAL;
  435.     (**tempWDH).sync2 = SYNC2VAL;
  436.     SetWData(wrPtr,&WD);
  437.  
  438.     DisposHandle(wdh);
  439.     if (!Visible)
  440.         return(wrPtr);
  441.  
  442.     ShowWindow(wrPtr);
  443.     SetPort(wrPtr);
  444.     SelectWindow(wrPtr);
  445.  
  446.     if (ValidPointer((Ptr)oldFrontW)) {
  447.         GetWData(oldFrontW,&WD);
  448.         if (ValidWData(&WD)) {
  449.             if (WD.GrowBox)
  450.                 DrawGrowIcon(oldFrontW);
  451.             if (ValidHandle((Handle)(WD.vScrollBar)))
  452.                 HideControl(WD.vScrollBar);
  453.             if (ValidHandle((Handle)(WD.hScrollBar)))
  454.                 HideControl(WD.hScrollBar);
  455.         }
  456.     }
  457.     return(wrPtr);
  458. }
  459.  
  460. WDHandle setup_WData(wrPtr,wRect,Title,wType,Visible,GoAwayBox,GrowBox,vScrollBar,hScrollBar)
  461. WindowRecord    *wrPtr;
  462. Rect            *wRect;
  463. char            *Title;
  464. int                wType;
  465. Boolean            Visible,GoAwayBox,GrowBox,vScrollBar,hScrollBar;
  466. {
  467.     WDHandle         wdh;
  468.     
  469.     wdh = (WDHandle)NewHandle((LONG)sizeof(WData));
  470.     InitWData(*wdh);
  471.     
  472.     (**wdh).rsrv1 = (ULONG)wrPtr;
  473.     (**wdh).rsrv3 = (ULONG)wRect;
  474.     (**wdh).rsrv2 = (ULONG)Title;
  475.     (**wdh).rsrv4 = (ULONG)wType;
  476.     
  477.     (**wdh).UsrRef1 = (ULONG)Visible;
  478.     (**wdh).UsrRef2 = (ULONG)GoAwayBox;
  479.     (**wdh).GrowBox = GrowBox;
  480.     (**wdh).vScrollBar = (ControlHandle)vScrollBar;
  481.     (**wdh).hScrollBar = (ControlHandle)hScrollBar;
  482.     
  483.     return(wdh);
  484. }
  485.     
  486.